﻿using System;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;

namespace HumanElement.Xna.Construct
{
    /// <summary>
    /// 
    /// </summary>
    public interface ICamera : IPosition, IRenderable, IEntity<ICameraManager>
    {
        /// <summary>
        /// Gets or sets the FPS.
        /// </summary>
        /// <value>The FPS.</value>
        float Fps { get; set; }

        /// <summary>
        /// Gets the aspect ratio.
        /// </summary>
        /// <value>The aspect ratio.</value>
        float AspectRatio { get; }

        /// <summary>
        /// Gets the near clip plane.
        /// </summary>
        /// <value>The near clip plane.</value>
        float NearClipPlane { get; }

        /// <summary>
        /// Gets the far clip plane.
        /// </summary>
        /// <value>The far clip plane.</value>
        float FarClipPlane { get; }

        /// <summary>
        /// Gets the field of view.
        /// </summary>
        /// <value>The field of view.</value>
        float FieldOfView { get; }

        /// <summary>
        /// Gets the target.
        /// </summary>
        /// <value>The target.</value>
        IPosition Target { get; }

        /// <summary>
        /// Gets the view matrix.
        /// </summary>
        /// <value>The view matrix.</value>
        Matrix ViewMatrix { get; }

        /// <summary>
        /// Gets the projection matrix.
        /// </summary>
        /// <value>The projection matrix.</value>
        Matrix ProjectionMatrix { get; }

        /// <summary>
        /// Gets the viewport.
        /// </summary>
        /// <value>The viewport.</value>
        IViewport Viewport { get; }


    }

    /// <summary>
    /// <c>public interface IFreeCamera : ICamera, IDynamic</c>
    /// </summary>
    public interface IFreeCamera : ICamera, IPosition
    {


    }
}
